package tools;

import java.io.File;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.filechooser.FileView;

/**
 * Klasse, die eine Vorschau im Bild-laden-dialog ermoeglicht.
 */
public final class FileViewImage extends FileView {

    private static FileViewImage instance;

    private FileViewImage() {
    }

    public synchronized static FileViewImage getInstance() {
        if (instance == null) {
            instance = new FileViewImage();
        }
        return instance;
    }

    /**
     * gibt das format von f zurueck
     * @param f
     * @return
     */
    private static String getEnd(File f) {
        String end = "";
        String s = f.getName();
        int i = s.lastIndexOf('.');
        if (i > 0 && i < s.length() - 1) {
            end = s.substring(i + 1).toLowerCase();
        }
        return end;
    }

    /**
     * prüft ob file ein image ist mit der Endung
     * -jpeg, -jpg, -png
     * @param f  file
     * @return true wenn f ein image ist mit der Endung
     * -jpeg, -jpg, -png 
     * sonst false
     */
    private boolean accept(File f) {
        String end = getEnd(f);
        if (end != null) {
            if (end.equals("jpeg")
                    || end.equals("jpg")
                    || end.equals("bmp")
                    || end.equals("png")) {
                return true;
            } else {
                return false;
            }
        }
        return false;
    }

    /**
     * gibt ein ImageIcon zurueck, wenn es ein image ist der type
     * -jpeg, -jpg, -png
     * sonst null
     * @param f
     * @return ein ImageIcon
     */
    @Override
    public Icon getIcon(File f) {
        Icon icon = null;
        String path = f.getPath();
        path = f.getAbsolutePath();
        if (accept(f)) {
            icon = createImageIcon(path);
        }
        return icon;
    }

    /**
     * Die URL vom eingegebenen path wird gesucht.
     * Mit dieser wird dann ein neues ImageIcon erzeugt und ausgegeben
     * @param path
     * @return ImageIcon
     */
    public ImageIcon createImageIcon(String path) {
        java.net.URL imgURL = FileViewImage.class.getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL);
        } else {
            return null;
        }
    }
}